#!/usr/bin/env node

/**
 * 测试新的Agent架构
 * 演示如何使用mastra-client调用游戏管理Agent替代REST API
 */

import { gameClient } from './src/client/game-client.js';

async function testAgentArchitecture() {
  console.log('🎮 开始测试新的Agent架构...\n');
  
  try {
    // 测试1: 开始新游戏
    console.log('=== 测试1: 开始新游戏 ===');
    const gameResult = await gameClient.startNewGame('easy', '办公室', 3);
    
    if (gameResult.success) {
      console.log('✅ 游戏开始成功');
      console.log('游戏ID:', gameResult.data?.gameId);
      console.log('案件标题:', gameResult.data?.caseData?.case?.title);
      console.log('嫌疑人数量:', gameResult.data?.caseData?.suspects?.length);
      
      const gameId = gameResult.data?.gameId;
      
      if (gameId) {
        // 测试2: 与嫌疑人对话
        console.log('\n=== 测试2: 与嫌疑人对话 ===');
        const chatResult = await gameClient.chatWithSuspect(
          gameId,
          'suspect-1',
          '你当时在哪里？',
          []
        );
        
        if (chatResult.success) {
          console.log('✅ 对话成功');
          console.log('嫌疑人回应:', chatResult.data?.response);
          console.log('情绪状态:', chatResult.data?.emotion);
        } else {
          console.log('❌ 对话失败:', chatResult.message);
        }
        
        // 测试3: 获取游戏状态
        console.log('\n=== 测试3: 获取游戏状态 ===');
        const statusResult = await gameClient.getGameStatus(gameId);
        
        if (statusResult.success) {
          console.log('✅ 获取状态成功');
          console.log('游戏阶段:', statusResult.gameState?.phase);
          console.log('剩余时间:', statusResult.gameState?.timeRemaining);
        } else {
          console.log('❌ 获取状态失败:', statusResult.message);
        }
        
        // 测试4: 提交推理结果
        console.log('\n=== 测试4: 提交推理结果 ===');
        const deductionResult = await gameClient.submitDeduction(gameId, {
          culpritId: 'suspect-2',
          reasoning: '根据线索分析，王同事有最强的作案动机',
          evidence: ['clue-1', 'clue-2']
        });
        
        if (deductionResult.success) {
          console.log('✅ 推理提交成功');
          console.log('推理结果:', deductionResult.data?.isCorrect ? '正确' : '错误');
          console.log('得分:', deductionResult.data?.score);
        } else {
          console.log('❌ 推理提交失败:', deductionResult.message);
        }
      }
      
    } else {
      console.log('❌ 游戏开始失败:', gameResult.message);
    }
    
    console.log('\n🎉 Agent架构测试完成！');
    
  } catch (error) {
    console.error('❌ 测试过程中发生错误:', error);
  }
}

async function testDirectAgentCall() {
  console.log('\n🤖 测试直接Agent调用...\n');
  
  try {
    // 直接调用游戏管理Agent
    const result = await gameClient.callGameManager('start_game', {
      difficulty: 'normal',
      theme: '学校',
      suspectCount: 4
    });
    
    console.log('Agent直接调用结果:', result);
    
  } catch (error) {
    console.error('❌ 直接Agent调用失败:', error);
  }
}

async function compareWithOldAPI() {
  console.log('\n📊 对比新旧架构...\n');
  
  console.log('🔴 旧架构 (REST API):');
  console.log('  - 需要定义多个HTTP路由');
  console.log('  - 手动处理请求验证和错误处理');
  console.log('  - 固定的接口结构，难以扩展');
  console.log('  - 需要维护API文档');
  
  console.log('\n🟢 新架构 (Agent + mastra-client):');
  console.log('  - 统一的Agent接口，自然语言交互');
  console.log('  - 智能的参数解析和验证');
  console.log('  - 灵活的功能扩展，只需更新Agent指令');
  console.log('  - 自文档化的Agent能力');
  console.log('  - 更好的错误处理和降级机制');
  
  console.log('\n✨ 优势总结:');
  console.log('  1. 更简洁的代码结构');
  console.log('  2. 更智能的交互方式');
  console.log('  3. 更容易维护和扩展');
  console.log('  4. 更好的用户体验');
}

// 运行所有测试
async function runAllTests() {
  await testAgentArchitecture();
  await testDirectAgentCall();
  await compareWithOldAPI();
}

// 检查是否有服务器运行
async function checkServerStatus() {
  try {
    const response = await fetch('http://localhost:4111/api');
    if (response.ok) {
      console.log('✅ Mastra服务器正在运行');
      return true;
    }
  } catch (error) {
    console.log('❌ Mastra服务器未运行，请先启动服务器:');
    console.log('   npm run dev');
    return false;
  }
}

// 主函数
async function main() {
  console.log('🚀 赛博侦探游戏 - Agent架构测试\n');
  
  const serverRunning = await checkServerStatus();
  if (!serverRunning) {
    process.exit(1);
  }
  
  await runAllTests();
}

// 运行测试
main().catch(console.error);
